An operator is a language element that you can use in a command or expression. PowerShell supports several types of operators to help you manipulate values.
You won't get far in creating PowerShell scripts without performing conditional logic, which begins with comparing values. The ability to check if a user exists, if a file has been created, or if one computer is able to connect to another all require a comparison to a value. The one big gotcha in PowerShell has to do with syntax: rather than using traditional comparison operators like < or > PowerShell uses -lt or -gt to perform comparisons.
Several comparison operators are most commonly used with numerical values, although they have their place when working with dates or version numbers and other variable types as well. The following table contains the comparison operators most commonly used to compare numbers.
Use arithmetic operators (+, -, *, /, %) to calculate values in a command or expression. With these operators, you can add, subtract, multiply, or divide values, and calculate the remainder (modulus) of a division operation. You can also use arithmetic operators with strings, arrays, and hash tables. The addition operator concatenates elements. The multiplication operator returns the specified number of copies of each element.
$a = 3 $b = 2 $a + $b # 5 $a - $b # 1 $a * $b # 6 $a / $b # 1.5 $a % $b # 1 -$a # -3
Use assignment operators (=, +=, -=, *=, /=, %=) to assign one or more values to variables, to change the values in a variable, and to append values to variables. You can also cast the variable as any Microsoft .NET Framework data type, such as string or DateTime, or Process variable.
$a = 3 $b = 2 $a += $b # a = 5 $a -= $b # a = 1 $a *= $b # a = 6 $a /= $b # a = 1.5 $a %= $b # a = 1
Use comparison operators (-eq, -ne, -gt, -lt, -le, -ge) to compare values and test conditions. For example, you can compare two string values to determine whether they are equal. The comparison operators include the match operators (-match, -notmatch), which find patterns by using regular expressions; the replace operator (-replace), which uses regular expressions to change input values; the like operators (-like, -notlike), which find patterns using wildcard characters (*); and the containment operators (-in, -notin, -contains, -notcontains), which determine whether a test value appears in a reference set. They also include the bitwise operators (-bAND, -bOR, -bXOR, -bNOT) to manipulate the bit patterns in values.
$a = 3 $b = 2 $a -eq $b # False $a -ne $b # True $a -lt $b # False $a -gt $b # True $a -le $b # False $a -ge $b # True $a -lt $b -and $b -lt $a # False $a -lt $b -or $b -lt $a # True $a -lt $b # False -not ($a -lt $b) # True
Use logical operators (-and, -or, -xor, -not, !) to connect conditional statements into a single complex conditional. For example, you can use a logical -and operator to create an object filter with two different conditions.
$a = 3 $b = 2 $a -lt $b -and $b -lt $a # False $a -lt $b -or $b -lt $a # True $a -lt $b # False -not ($a -lt $b) # True
Use redirection operators (>, >>, 2>, 2>>, and 2>&1) to send the output of a command or expression to a text file. The redirection operators work like the Out-File cmdlet (without parameters) but they also let you redirect error output to specified files. You can also use the Tee-Object cmdlet to redirect output.
The -split and -join operators divide and combine substrings. The -split operator splits a string into substrings. The -join operator concatenates multiple strings into a single string.
$a = 'Cat,Dog,Fish,Hamster' $a -split ',' # Cat # Dog # Fish # Hamster $b = @('Cat','Dog','Fish','Hamster') $b -join ',' # Cat,Dog,Fish,Hamster 'Cat' + 'Dog' + 'Fish' + 'Hamster' # CatDogFishHamster
Use unary operators to increment or decrement variables or object properties and to set integers to positive or negative numbers. For example, to increment the variable $a from 9 to 10, you type $a++.
$a = 1 $a++ # a = 2 $a-- # a = 0
Use special operators to perform tasks that cannot be performed by the other types of operators. For example, special operators allow you to perform operations such as running commands and changing a value's data type.
Returns the result of one or more statements as an array. If there is only one item, the array has only one member.
@(Get-WMIObject win32_logicalDisk)
Runs a command, script, or script block. The call operator, also known as the "invocation operator," lets you run commands that are stored in variables and represented by strings. Because the call operator does not parse the command, it cannot interpret command parameters.
$c = "get-executionpolicy" $c # get-executionpolicy & $c # AllSigned
Converts or limits objects to the specified type. If the objects cannot be converted, PowerShell generates an error.
[datetime]$birthday = "1/20/88" [int64]$a = 34
As a binary operator, the comma creates an array. As a unary operator, the comma creates an array with one member. Place the comma before the member.
$myArray = 1,2,3 $SingleArray = ,1
Runs a script in the current scope so that any functions, aliases, and variables that the script creates are added to the current scope.
. c:\scripts.sample.ps1
Formats strings by using the format method of string objects. Enter the format string on the left side of the operator and the objects to be formatted on the right side of the operator.
"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi # 1 hello 3.14
Selects objects from indexed collections, such as arrays and hash tables. Array indexes are zero-based, so the first object is indexed as [0]. For arrays (only), you can also use negative indexes to get the last values. Hash tables are indexed by key value.
$a = 1, 2, 3 $a[0] # 1 $a[-1] # 3 ########################################### PS> (get-hotfix | sort installedOn)[-1] ########################################### $h = @{key="value"; name="PowerShell"; version="2.0"} $h["name"] # PowerShell
Sends ("pipes") the output of the command that precedes it to the command that follows it. When the output includes more than one object (a "collection"), the pipeline operator sends the objects one at a time.
$myProcess.peakWorkingSet (get-process PowerShell).kill()
Accesses the properties and methods of an object.
"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi # 1 hello 3.14
Represents the sequential integers in an integer array, given an upper and lower boundary.
1..10 10..1 foreach ($a in 1..$max) {write-host $a}
Calls the static properties operator and methods of a .NET Framework class. To find the static properties and methods of an object, use the Static parameter of the Get-Member cmdlet.
[datetime]::now
Returns the result of one or more statements. For a single result, returns a scalar. For multiple results, returns an array.
$($x * 23) $(Get-WMIObject win32_Directory)